package com.zwt.mq;


import com.zwt.domain.TsPlatformUser;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.support.CorrelationData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * Created by zwt on 2018/9/13.
 * 测试使用rabbitmq 发送消息
 */
@Component
public class TestSender {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    public void send(TsPlatformUser tsPlatformUser){

        final RabbitTemplate.ConfirmCallback confirmCallback = new RabbitTemplate.ConfirmCallback() {
            @Override
            public void confirm(CorrelationData correlationData, boolean b, String s) {
                System.out.println("correlationData: "+correlationData);
                System.out.println(b);
                if(b){
                    System.out.println("发送成功");
                    //发送消息成功后 更新消息表状态为发送成功
                }else{
                    /**
                     * 发送消息失败 如果有消息记录表 可设置消息的发送状态 0：发送中 1：成功 2：失败
                     * 如果失败 可以有一个定时任务专门去处理发送中的 重试3次 如果该是不成功 则判定失败 是为了防止断网引起的发送不成功
                     * 也可以直接在else代码中重试 也是重试3次 还不成功 失败
                     * 根据唯一的消息id做处理
                     */


                }
            }
        };

        rabbitTemplate.setConfirmCallback(confirmCallback);
        CorrelationData correlationData = new CorrelationData();
        correlationData.setId(System.currentTimeMillis()+"");
        rabbitTemplate.convertAndSend("test-exchange1","test.#",tsPlatformUser,correlationData);
    }
}
